A fundamental problem in digital communication and data storage is that data transmitted over a noisy channel or storage media may be retrieved with errors. A common solution to this problem is to add redundancy information to the data, referred to as Error Correcting Codes (ECC) or Error Control Codes, to correct the errors and enable reliable communication in the presence of channel interference. According to this technique, the receiver, which only has access to the noisy version of the received signal, may use the added redundancy (provided by the ECC) to correct errors and reconstruct the original version of the information as it was transmitted.
Current demand for increased throughput of communication over various communication media (e.g., satellite, wireless and optical) and increased density of data stored in nonvolatile memory modules (e.g., flash memory) poses growing challenges for error correction systems. At the same time, current system standards are increasing requirements for data fidelity and reliability over those systems (see e.g. high data fidelity requirements for nonvolatile memory modules or high throughput requirements for optical communication devices). For example, current Flash memory specifications require block error probability to be less than 10−11.
Consequently, there is a growing need in the art for systems and methods to efficiently encode and decode error correction codes to provide relatively high throughput or data density, while maintaining low decoding error rates.